package com.headfirst.BehaviorMode.command.simpleremote;

import com.headfirst.BehaviorMode.command.simpleremote.equipment.GarageDoor;
import com.headfirst.BehaviorMode.command.simpleremote.equipment.Light;

/**
 * 模拟命令模式的客户端
 */
public class RemoteControlTest {

    public static void main(String[] args) {
        
        // 拿到一个遥控器（遥控器就是调用者，会给其传递命令对象，可以用来发出请求）
        SimpleRemoteControl simpleRemoteControl = new SimpleRemoteControl();

        // 电灯对象（此对象也就是请求的接收者）
        Light light = new Light();
        // 打开电灯的命令对象,需要传递一个电灯对象（电灯对象自己才真正地知道如何打开）
        LightOnCommand lightOn = new LightOnCommand(light);
        
        // 客户负责创建一个ConcreteCommand，并设置其接收者
        GarageDoor garageDoor = new GarageDoor();
        GarageDoorOpenCommand garageOpen = new GarageDoorOpenCommand(garageDoor);
        
        // 给遥控器设置插槽控制的命令对象(把命令传递给调用者)
        simpleRemoteControl.setCommand(lightOn);
        // 按下遥控器的按钮
        simpleRemoteControl.buttonWasPressed();
        
        simpleRemoteControl.setCommand(garageOpen);
        simpleRemoteControl.buttonWasPressed();
    }
}
